IoC라는 약자로 많이 사용되는 제어의 역전(Inversion of control)이라는 용어가 있다.

제어권의 이전을 통한 제어관계 역전

제어의 역전이라는 것은 간단히 프로그램의 제어 흐름 구조가 뒤바뀌는 것이라고 설명한다

일반적으로 프로그램의 흐름은 main()메소드와 같이 프로그램이 시작되는 지점이 있고, 거기서 오브젝트를 정하고, 생성하고, 메소드를 호출하고 다음 사용할 것을 결정하는 등의 작업이 반복된다. 여기서 각 오브젝트는 프로그램 흐름을 결정하거나 사용할 오브젝트를 구성하는 작업에 능동적으로 참여한다.

제어의 역전이란 이런 제어 흐름의 개념을 거꾸로 뒤집는 것이다. \ 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하고 생성하지 않고 모든 제어 권한을 다른 대상에게 위임한다.

템플릿 메소드의 경우 제어권을 상위 템플릿 메소드에게 넘기고 자신은 필요할 때 호출되어 사용되도록 한다는 제어의 역전 개념을 발견할 수 있다

프레임워크 어플리케이션 코드가 프레임워크에 의해 사용된다. 즉 수동적으로 동작하는 제어의 역전 개념이 적용되어 있다. \ (라이브러리를 사용하는 어플리케이션 코드는 어플리케이션 흐름을 직접 제어한다. 단지 동작하는 중에 플요한 기능이 있을 때 능동적으로 라이브러리를 사용하는데, 능동적으로 참여한다는 점에서 프레임워크와 다른점이다.)

IoC를 적용함으로써 설계가 깔끔해지고 유연성이 증가하며 확장성이 좋아진다. Spring에서는 이러한 IoC개념을 모든 기능의 기초가 되는 기반 기술로 삼고 있다.